【MySQL】UNION - SELECT結果の結合
MySQLのUNIONについて解説します。
検証環境
UNION
UNIONは複数SELECT文の取得結果をカラム単位で結合します。
次のpersons
テーブルとcompanies
テーブルで具体例を示します。
/* personsテーブル */
+--------+---------------+------+
| name | tel | age |
+--------+---------------+------+
| TANAKA | AAA-AAAA-AAAA | 25 |
| SAITO | BBB-BBBB-BBBB | 20 |
| SUZUKI | ZZZ-ZZZZ-ZZZZ | 30 |
+--------+---------------+------+
/* companiesテーブル */
+--------+---------------+
| name | tel |
+--------+---------------+
| ABC | XXX-XXXX-XXXX |
| SIer | YYY-YYYY-YYYY |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
+--------+---------------+
この2テーブルのname
カラムとtel
カラムをUNIONで結合した結果は次の表です。
+--------+---------------+
| name | tel |
+--------+---------------+
| TANAKA | AAA-AAAA-AAAA |
| SAITO | BBB-BBBB-BBBB |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
| ABC | XXX-XXXX-XXXX |
| SIer | YYY-YYYY-YYYY |
+--------+---------------+
基本構文
SELECT カラム名 FROM テーブルA UNION SELECT カラム名 FROM テーブルB
UNION句はSELECT文と合わせて使用します。
2つのSELECT文(SELECT カラム名 FROM テーブルA
とSELECT カラム名 FROM テーブルB
)の間にUNION
を記述します。
サンプル
mysql> SELECT * FROM persons;
+--------+---------------+------+
| name | tel | age |
+--------+---------------+------+
| TANAKA | AAA-AAAA-AAAA | 25 |
| SAITO | BBB-BBBB-BBBB | 20 |
| SUZUKI | ZZZ-ZZZZ-ZZZZ | 30 |
+--------+---------------+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM companies;
+--------+---------------+
| name | tel |
+--------+---------------+
| ABC | XXX-XXXX-XXXX |
| SIer | YYY-YYYY-YYYY |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
+--------+---------------+
3 rows in set (0.00 sec)
mysql> SELECT name, tel FROM persons
___ih_hl_start
-> UNION SELECT name, tel FROM companies;
___ih_hl_end
+--------+---------------+
| name | tel |
+--------+---------------+
| TANAKA | AAA-AAAA-AAAA |
| SAITO | BBB-BBBB-BBBB |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
| ABC | XXX-XXXX-XXXX |
| SIer | YYY-YYYY-YYYY |
+--------+---------------+
5 rows in set (0.00 sec)
22行目がUNION句の部分です。
persons
テーブルとcompanies
テーブルのname
カラムとtel
カラムのレコードが1つの表になりました。
また、UNION句は重複データを除外します。
重複データを表示する場合はUNION
の後にALL
を記述します。
mysql> SELECT name, tel FROM persons UNION ALL SELECT name, tel FROM companies;
+--------+---------------+
| name | tel |
+--------+---------------+
| TANAKA | AAA-AAAA-AAAA |
| SAITO | BBB-BBBB-BBBB |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
| ABC | XXX-XXXX-XXXX |
| SIer | YYY-YYYY-YYYY |
| SUZUKI | ZZZ-ZZZZ-ZZZZ |
+--------+---------------+
6 rows in set (0.00 sec)